//发布订阅的思想
// let dep = {
//   list: [],
//   on: function (fn) {
//     list.push(fn);
//   },
//   emit: function () {
//     this.list.forEach(event => {
//       typeof event === 'function' ? event() : null;
//     })
//   }
// };

// function Promise (executor){//这里接受函数,如果出现问题抛出错误,没有就执行函数返回结果
//   var self = this;//resolve和reject中的this指向不是promise实例，需要用self缓存
//   self.state = 'padding';
//   self.value = '';//缓存成功回调onfulfilled的参数
//   self.reson = '';//缓存失败回调onrejected的参数
//   self.onResolved = []; // 专门存放成功的回调onfulfilled的集合
//   self.onRejected = []; // 专门存放失败的回调onrejected的集合
//   function resolve(value){
//     if(self.state==='padding'){//判断状态是否是padding
//       self.state ='resolved';//待定不知道干嘛的
//       self.value=value;//设置缓存成功之后的参数保存在数组中
//       self.onResolved.forEach(fn=>fn())//调用成功的名单
//     }
//   }
//   function reject(value){
//     self.state = 'rejected';
//     self.value = reason;
//     self.onRejected.forEach(fn=>fn())//清空
//   }
//   try{
//     //调用执行器
//     executor(resolve,reject);
//   }catch(e){
//     reject(e);
//   }
// }
// Promise.prototype.then=function(onfulfilled,onrejected){
//   onfulfilled = typeof onfulfilled == 'function' ? onfulfilled : val => val;//onfulfilled缺省处理
//   onrejected = typeof onrejected === 'function' ? onrejected : err => {throw err;};//onrejected缺省处理
//   var self=this,promise2=new Promise((resolve,reject)=>{//返回一个promise
//     if(this.state==='resolved'){
//       //成功之后传递数据
//       try{
//         onfulfilled(self.value);//里面会执行resolve    
//       }catch(e){
//         reject(e);
//       }
//     }
//     if(this.state==='rejected'){
//       try{
//         onrejected(self.value);
//       }catch(e){
//         reject(e);
//       }
//     }

//     if(this.state==='padding'){//将执行缓存
//       this.onResolved.push(function () {
//         onfulfilled(self.value)
//       })
//     }
//     self.onRejected.push(function () {
//       try{
//           onrejected(self.value);
//       }catch(e){
//           reject(e)
//       }
//     })
//   })
//   return promise2;
// }

// var promise = new Promise((resolve,reject)=>{
//   console.log("start")
//   resolve(123);//调用成功时的回调
//   setInterval(() => {
//   }, 1000);
// }).then(res=>{
//   console.log(res);
// })


//手写promise
//同步回调函数
let arr = [1,2,3,4];
arr.forEach(item=>{//同步函数不会放入对列,一上来就执行
  console.log(item);
})
console.log("forEach之后执行");
//异步回调函数
setTimeout(()=>{//异步函数放入队列
  console.log("setTimeout");
},0)
console.log("settimout之后执行");